iT邦幫忙

2022 iThome 鐵人賽

DAY 21
1
AI & Data

[GCP BigQuery] - 探索資料倉儲,開啟你的數位轉型之旅系列 第 21

Day 21: 優化你的BigQuery 查詢,Partitioned 和 Clustered 的使用時機和限制

  • 分享至 

  • xImage
  •  

https://ithelp.ithome.com.tw/upload/images/20221005/20152529vqiBSlONZX.png

前言:

我們在 Day 19Day 20 曾提到使用 Partitioned tableClustered table 不僅能夠提升查詢效能,進而能夠減少費用(特別在以量計價模式下更有感覺),甚至降低故障。

其實 Partitioned table 和 Clustered table 都能夠提升查詢效能,並且在概念上,都是對一張大表去做切片,能更快從切片找到我們要的資料,而不用掃描整張大表。

你應該會有點疑惑,那麼兩者到底有什麼差異呢?

其實就是根據資料的屬性再決定要設置 Partitioned table 還是 Clustered table !

當然,Partitioned 和 Clustered 也是可以同時設定在同一張表的,設置得當的話,效能更好。

Partitioned table (分區表):

分區表,顧名思義就是將一張大表,使用我們定義的規則去把它分區切成一張張小表,而這個分區的規則可以是時間或是整數,而時間粒度可以分為按年、按月、按日、按小時去做分區,分區的規則只能有1個,不像 clustered table 最多可以有 4個。

https://ithelp.ithome.com.tw/upload/images/20221005/20152529JrUTO7oPGr.png

假設我們已經建立Partitioned table,並且使用以下查詢:

SELECT event_type
FROM test_table
WHERE date = ‘2020-11-03’;

BQ 就只會查看藍色標起來的數據。

https://ithelp.ithome.com.tw/upload/images/20221005/20152529ajGCnB3acN.png

使用分區的方式要留意,Partitioned table 存在配額限制,每個表最多只可以有 4000個分區,這句話是什麼意思呢?

舉個例子:

情況一: 假設我們使用按日的方式去做分區表,那麼我們最多可以設置十年左右的數據。

365 * 10 = 3650 < 4000

情況二: 假設我們使用按小時的方式去做分區表,那麼我們這張表最多可以存放五個月左右的數據。

24 * 30 * 5 = 3600 < 4000

舉以上兩個例子主要是想提醒大家,未來在設計分區表的時候,要記得分區表存在分區 4000的配額限制。

Clustered table:

Clustered table 硬翻成中文實在太難唸了,我們還是就用英文吧! Clustered table 顧名思義就是將一張大表去做分群, 而這個分群最多可以設置 4 個 column。 還記得我們在 Day 07 曾提到 BigQuery 的基本架構可以分為儲存和運算,BQ背後儲存的方式就是分散式運算,當我們沒有設置任何 Clustered columns的時候,我們的資料是被隨機排序的。

當有設置 Clustered columns的時候,情況就不同了,BQ會對我們的資料作排序,並且排序的順序,是按照我們給的columns 順序。

假設我們已經建立Clustered table,執行範圍如藍色:

SELECT event_type
FROM test_table
WHERE event_type = ‘liveness’;

https://ithelp.ithome.com.tw/upload/images/20221005/20152529UetbwqhJJR.png

使用 clustered table 的注意事項我們在 Day 20 曾提到過,因為 BQ 是在執行後才去做 cluster,因此費用無法在執行前被預估。

Partitioned table 結合 Clustered table,更節省費用!

假設執行以下查詢:

SELECT event_type
FROM test_table
WHERE TTimestamp = ‘2020-11-03’ and event_type = ‘liveness’;

如果我們只建立Partitioned table,查詢範圍如藍色:

https://ithelp.ithome.com.tw/upload/images/20221005/20152529RK8z8rSHz7.png

如果我們做建立Partitioned table 加上 clustered table,查詢範圍如藍色:

https://ithelp.ithome.com.tw/upload/images/20221005/20152529UlozL83Z3e.png

*註: 結合使用的話,BQ 的背後是先做 Partitioned,再做 clustered。

Partitioned table VS. Clustered table

比較 Partitioned table Clustered table
配額限制 最多只能設置 4000 個分區
可設置 column 數 只能設置 1 個 可以設置 4 個,並按照設置順序去排序
執行前可否預估費用 執行前可以知道費用 執行前無法知道費用
使用時機 1.希望在查詢前知道費用 2.需要做額外的管理,比如設置分區的到期時間 1. 資料欄位屬於高基數 2. 執行前無須嚴格的費用保證 3. 經常對多個欄位做 過濾 或是 使用 聚合函數。

*註: 高基數: 數據列中獨一無二的數量。

Summary:

不論是 Partitioned 或 clustered 均可以節省效能費用,甚至也可以結合Partitioned 和 clustered,設置得當的話,效果更好。

Reference:

Introduction to partitioned tables
Introduction to clustered tables
配額限制


上一篇
Day 20: 優化你的BigQuery 查詢,提高查詢效能並節省費用 (下) (實作)
下一篇
Day 22: 優化你的BigQuery 查詢,建立 Partitioned 和 Clustered table (實作)
系列文
[GCP BigQuery] - 探索資料倉儲,開啟你的數位轉型之旅30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言